sizegroup: Handle hfw in size groups
authorBenjamin Otte <otte@redhat.com>
Thu, 1 Nov 2012 23:33:42 +0000 (00:33 +0100)
committerBenjamin Otte <otte@redhat.com>
Sun, 4 Nov 2012 14:24:17 +0000 (15:24 +0100)
gtk/gtksizegroup-private.h
gtk/gtksizegroup.c
gtk/gtksizerequest.c

index dc813cdb2e4e5274d52523c0a013f116fbe0b9d6..59ef7816261ec3d34c497d014181f50c6a29b80b 100644 (file)
@@ -39,6 +39,7 @@ typedef enum
 
 void _gtk_size_group_bump_requisition (GtkWidget           *widget,
                                        GtkSizeGroupMode     mode,
+                                       gint                 for_size,
                                        gint                *minimum,
                                        gint                *natural);
 void _gtk_size_group_queue_resize     (GtkWidget           *widget,
index 594e90af5bd506d98152c8c0a51f93740f3d55c4..3385e04131907c6c3c086301b006b64e07a0186e 100644 (file)
@@ -630,6 +630,7 @@ gtk_size_group_get_widgets (GtkSizeGroup *size_group)
 static void
 compute_dimension (GtkWidget        *widget,
                   GtkSizeGroupMode  mode,
+                   gint              for_size,
                   gint             *minimum, /* in-out */
                   gint             *natural) /* in-out */
 {
@@ -654,9 +655,19 @@ compute_dimension (GtkWidget        *widget,
       else
         {
           if (mode == GTK_SIZE_GROUP_HORIZONTAL)
-            gtk_widget_get_preferred_width (tmp_widget, &min_dimension, &nat_dimension);
+            {
+              if (for_size < 0)
+                gtk_widget_get_preferred_width (tmp_widget, &min_dimension, &nat_dimension);
+              else
+                gtk_widget_get_preferred_width_for_height (tmp_widget, for_size, &min_dimension, &nat_dimension);
+            }
           else
-            gtk_widget_get_preferred_height (tmp_widget, &min_dimension, &nat_dimension);
+            {
+              if (for_size < 0)
+                gtk_widget_get_preferred_height (tmp_widget, &min_dimension, &nat_dimension);
+              else
+                gtk_widget_get_preferred_height_for_width (tmp_widget, for_size, &min_dimension, &nat_dimension);
+            }
         }
 
       min_result = MAX (min_result, min_dimension);
@@ -676,6 +687,7 @@ compute_dimension (GtkWidget        *widget,
  * @widget: a #GtkWidget
  * @mode: either %GTK_SIZE_GROUP_HORIZONTAL or %GTK_SIZE_GROUP_VERTICAL, depending
  *        on the dimension in which to bump the size.
+ * @for_size: Size to request minimum and natural size for
  * @minimum: a pointer to the widget's minimum size
  * @natural: a pointer to the widget's natural size
  *
@@ -689,6 +701,7 @@ compute_dimension (GtkWidget        *widget,
 void
 _gtk_size_group_bump_requisition (GtkWidget        *widget,
                                  GtkSizeGroupMode  mode,
+                                  gint              for_size,
                                  gint             *minimum,
                                  gint             *natural)
 {
@@ -698,7 +711,7 @@ _gtk_size_group_bump_requisition (GtkWidget        *widget,
       _gtk_widget_set_sizegroup_bumping (widget, TRUE);
 
       if (_gtk_widget_get_sizegroups (widget))
-       compute_dimension (widget, mode, minimum, natural);
+       compute_dimension (widget, mode, for_size, minimum, natural);
 
       _gtk_widget_set_sizegroup_bumping (widget, FALSE);
     }
index 0a9b1bacc2b72e802429bd42cf729d833f999117..c0e461fe0a9986e5cecdce53adde785c1b8e57da 100644 (file)
@@ -469,6 +469,7 @@ compute_size_for_orientation (GtkWidget         *widget,
        */
       _gtk_size_group_bump_requisition (widget,
                                        orientation,
+                                        for_size,
                                        &min_size,
                                        &nat_size);